#include<stdio.h>
#include<malloc.h>
#include<Windows.h>
#define STACK_INIT_SIZE 100
#define ERROR -1
#define OK 0;	
#define	STACKINCREMENT 10
typedef struct {
	int *base;
	int *top;
	int stacksize;
}SqStack;
int InitStack(SqStack&S){
	S.base = (int *)malloc(STACK_INIT_SIZE*sizeof(int));
	if(!S.base) return ERROR;
	S.top = S.base;
	S.stacksize = STACK_INIT_SIZE;
	return OK;
}
int Push (SqStack&S,int e)
{	
	if(S.top -S.base>=S.stacksize){
	S.base = (int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
	if(!S.base) return ERROR;
	S.top = S.base + S.stacksize;
	S.stacksize+=STACKINCREMENT;
}
*S.top = e;
S.top++;
return OK;
}

int Pop(SqStack&S,int &e){
	if(S.base = S.top){
	return ERROR;
	}
	--S.top;
	e = *S.top;
	return OK;
}
int GetTop(SqStack &S,int &e){
	if(S.top==S.base)return ERROR;
	e = *(S.top-1);
	return OK;
}
int main(){
SqStack A;
InitStack(A);
Push(A,2);
int b,c;

GetTop(A,b);
printf("%d",b);
Pop(A,c);
system("pause");
}